#include <stdio.h>     // 标准 C 输入输出，用于 printf, perror
#include <sys/types.h> // 包含 pid_t, key_t 等类型
#include <sys/ipc.h>   // 包含 IPC 相关的定义和标志，如 IPC_CREAT, IPC_EXCL
#include <sys/shm.h>   // 包含共享内存相关的定义和函数，如 shmget
#include <unistd.h>    // 包含 POSIX 标准函数，如 getpid, sleep
#include <errno.h>     // 包含错误码定义，用于检查 perror 输出

// 定义用于生成 key 值的路径名和项目 ID
// 注意：PATHNAME 指定的文件必须是存在的！
#define PATHNAME "/etc/passwd" // 示例中使用 /etc/passwd，一个通常存在的系统文件

#define PROJ_ID 0x6666 // 示例项目 ID，一个小的整数
#define SIZE 4096
int main()
{
    key_t key = ftok(PATHNAME, PROJ_ID); // 生成一个唯一的 key 值
    if (key < 0)
    {
        perror("ftok");
        return 1;
    }
    int shm_id = shmget(key, SIZE, IPC_CREAT | IPC_EXCL | 0666); // 创建共享内存
    if (shm_id < 0)
    {
        perror("shmget");
        return 2;
    }
    printf("key:%x\n", key);
    printf("shm_id:%d\n", shm_id);
    // shmctl(shm_id, IPC_RMID, NULL); // 删除共享内存
    return 0;
}